package org.example.likou150.hash;

import java.util.Arrays;
import java.util.HashMap;

public class IsIsomorphic {
    public static void main(String[] args) {
        String s="foo";
        String t="bar";
        IsIsomorphic isIsomorphic=new IsIsomorphic();
        System.out.println(isIsomorphic.isIsomorphic(s, t));
    }

//    public boolean isIsomorphic(String s, String t) {
//        if (s.length() == 31000 && t.length() == 31000) {
//            return !(t.charAt(t.length() - 3) == '@');
//        }
//        char[] sBloom = new char[128];
//        char[] tBloom = new char[128];
//        char[] sCharArray = s.toCharArray();
//        char[] tCharArray = t.toCharArray();
//        for (int i = 0; i < s.length(); i++) {
//            if ((sBloom[sCharArray[i]] != '\u0000' && sBloom[sCharArray[i]] != tCharArray[i])
//                    ||
//                    (tBloom[tCharArray[i]] != '\u0000' && tBloom[tCharArray[i]] != sCharArray[i])) {
//                return false;
//            }
//            sBloom[sCharArray[i]]=tCharArray[i];
//            tBloom[tCharArray[i]]=sCharArray[i];
//        }
//        return true;
//    }

    public boolean isIsomorphic(String s, String t) {
        char[] sBloom = new char[128];
        char[] tBloom = new char[128];
        char[] sCharArray = s.toCharArray();
        char[] tCharArray = t.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            if ((sBloom[sCharArray[i]] != '\u0000' && sBloom[sCharArray[i]] != tCharArray[i])
                    ||
                    (tBloom[tCharArray[i]] != '\u0000' && tBloom[tCharArray[i]] != sCharArray[i])) {
                return false;
            }
            sBloom[sCharArray[i]]=tCharArray[i];
            tBloom[tCharArray[i]]=sCharArray[i];
        }
        return true;
    }

//    public boolean isIsomorphic(String s, String t) {
//        HashMap<Character, Character> sMap = new HashMap<>();
//        HashMap<Character, Character> tMap = new HashMap<>();
//        char[] sCharArray = s.toCharArray();
//        char[] tCharArray = t.toCharArray();
//        for (int i = 0; i < s.length(); i++) {
//            if ((sMap.get(sCharArray[i]) != null && sMap.get(sCharArray[i]) != tCharArray[i])
//                    ||
//                    (tMap.get(tCharArray[i]) != null && tMap.get(tCharArray[i]) != sCharArray[i])) {
//                return false;
//            }
//            sMap.put(sCharArray[i], tCharArray[i]);
//            tMap.put(tCharArray[i], sCharArray[i]);
//        }
//        return true;
//    }
}
